package com.hyw.encryption.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import org.springframework.web.bind.annotation.RequestBody;

/**
 * 特殊说明, 由于解密的数据主要的来源是基于JSON体的. 所以, 要求http必须是POST请求, 且参数上必须要有 {@link RequestBody}的注解.否则 ,即使加上该注解,将不会有任何效果
 * 
 * @author Hongyu
 */
@Retention(RUNTIME)
@Target(METHOD)
public @interface Decrypted {
  /**
   * 业务上用来指定对应的解密算法, 一般对于输入的参数做解密,默认为RSA 目前可选的有
   * <li>RSA
   * <li>AES
   */
  String value() default "RSA";

  /**
   * 用于业务上的Key,具体由业务决定.
   * <p>
   * 目前基于当前业务 , 默认从请求头的uid中获得入参
   * <p>
   * 关于该Key的获取,由于系统拦截的位置是controller方法, 即HTTP请求的上下文, 所以会从上下文中, 根据key来获取对应的Value值.
   * <p>
   * 目前主要是从请求头中获取
   * 
   * @return
   */
  String key() default "uid";
}
